/*
 * @Author: wangshuixin 2412658453@qq.com
 * @Date: 2024-11-08 10:10:17
 * @LastEditors: wangshuixin 2412658453@qq.com
 * @LastEditTime: 2024-11-08 10:10:44
 * @FilePath: \tspods\types\component.ts
 * @Description: 组件所用类型声明
 */

/**
 * 表格组件 >> 表头字段
*/
export interface TableColumnItem {
  title: string, // 标题
  dataIndex: string, // 列信息的标识
  visible?: boolean // 该列是否可见
  width?: number, // 占据宽度
  fixed?: string, // 固定位置
  slotName?: string, // 插槽名 - 确定需要使用时，才添加该属性，否则将覆盖默认文本，显示为空白
  tooltip?: boolean, // 是否使用“...”省略超出长度的文本，同时显示气泡提示文字
  label?: string, // 标题 >> 用于列数据显隐
  key?: string, // 列信息的标识 >> 用于列数据显隐
  disabled?: boolean // 是否允许用户操作 >> 用于列数据显隐
  sortable?: boolean, // 是否可筛选，true时，列可排序；custom时，表示用户自定义排序逻辑；
  sortOrders?: Array<string[]>, // 定义排序的顺序 ['descending', 'ascending']
  [property: string]: any
}

/**
 * 下拉选择框可选数据行
*/
export interface SelectComponentDataDTO {
  title?: string, // 显示文字
  value?: string, // 勾选时需要回显的值
  [property: string]: any
}

/**
 * 日期选择器组件设置
*/
export interface DatePickerOptionsDTO {
  shortcuts?: Object[], // 设置快捷选项，需要传入 { text, onClick } 对象
  disabledDate?: Function, // 设置禁用状态，参数为当前日期，要求返回 Boolean
  cellClassName?: Function, // 设置日期的 className，类型Function(Date)
  firstDayOfWeek?: Number, // 周起始日，可选值1 到 7，默认 7
  onPick?: Function, // 选中日期后会执行的回调，只有当 daterange 或 datetimerange 才生效；类型Function({ maxDate, minDate })
}

/**
 * 搜索条件组件的配置，需要的数据类型
*/
export interface ComponentDataDTO {
  options: SelectComponentDataDTO[], // 下拉选择框的可选数据
  pickerOptions: DatePickerOptionsDTO,// 当前时间日期选择器特有的选项 >> 设置了无效，暂时不知道为啥
  [property: string]: any
}

/**
 * 搜索条件组件 >> 传入参数，用于生成对应的搜索组件
*/
export interface SearchBarComponent {
  type: number, // 组件的类型：0 搜索框；1 下拉勾选框；2 日历组件；
  key: string, // 搜索条件的绑定字段
  value?: any, // 组件传入值，用于回显
  width?: number, // 组件宽度
  placeholder?: string, // 占位符
  config?: ComponentDataDTO, // 组件的使用配置（传入组件的可选数据）
  [property: string]: any
}